package com.qinggeng.project.system.service.impl;

import com.qinggeng.common.exception.CustomException;
import com.qinggeng.common.utils.StringUtils;
import com.qinggeng.project.api.dto.InvitCodeDTO;
import com.qinggeng.project.api.utils.CommandUtils;
import com.qinggeng.project.system.domain.SysUser;
import com.qinggeng.project.system.domain.UserInvitCode;
import com.qinggeng.project.system.domain.vo.UserInvitCodeVO;
import com.qinggeng.project.system.mapper.SysUserMapper;
import com.qinggeng.project.system.mapper.UserInvitCodeMapper;
import com.qinggeng.project.system.service.IUserActivityService;
import com.qinggeng.project.system.service.UserInvitCodeService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;

import javax.annotation.Resource;
import java.util.Date;

@Service
public class UserInvitCodeServiceImpl implements UserInvitCodeService {

    @Resource
    private UserInvitCodeMapper userInvitCodeMapper;
    @Resource
    private IUserActivityService userActivityService;

    private  static  final  Long KEY =1000L;

    @Resource
    private SysUserMapper sysUserMapper;

    @Override
    public boolean checkInvitActivity( ) {
        boolean bl= this.checkInvitActivity(KEY);
        return bl;
    }

    private boolean checkInvitActivity(Long dictKey) {
        userActivityService.getUserActivity(dictKey.toString());
        return true;
    }

    @Override
    public UserInvitCode checkInvitCode(String code) {
        UserInvitCode userInvitCode= this.getUserInvitCode(code);
        if (null == userInvitCode){
            throw  new CustomException("当前code不存在");
        }
        Integer invalid=userInvitCode.getInvalid();
        if (1 == invalid){
            throw  new CustomException("当前invalid已经失效");
        }
        return userInvitCode;
    }
    private  UserInvitCode getUserInvitCode(String code){
        Example example =new Example(UserInvitCode.class);
        example.createCriteria().andEqualTo("invitCode",code);
        UserInvitCode userInvitCode= userInvitCodeMapper.selectOneByExample(example);
        return  userInvitCode;
    }

    private  UserInvitCode getUserInvitById(Long userId){
        Example example =new Example(UserInvitCode.class);
        example.createCriteria().andEqualTo("userId",userId);
        UserInvitCode userInvitCode= userInvitCodeMapper.selectOneByExample(example);
        return  userInvitCode;
    }


    @Override
    public UserInvitCode createInvitCode(InvitCodeDTO dto) {
        String adCode=dto.getAdCode();
        if (StringUtils.isEmpty(adCode)){
            throw  new CustomException("adCode不能为空");
        }
        Long userId=dto.getUserId();
        UserInvitCode userInvitCode= this.getUserInvitById(userId);
        if (null == userInvitCode){
            userInvitCode=new UserInvitCode();
            userInvitCode.setCreateTime(new Date());
            userInvitCode.setUpdateTime(new Date());
            userInvitCode.setUserId(userId);
            userInvitCode.setInvitCode(CommandUtils.getPullNewCommand(userId));
            userInvitCode.setInvitTimeStamp(new Date().getTime());
            userInvitCode.setAdCode(adCode);
            userInvitCodeMapper.insertSelective(userInvitCode);
            return  userInvitCode;
        }
        UserInvitCode invitCode=new UserInvitCode();
        invitCode.setId(userInvitCode.getId());
        invitCode.setAdCode(adCode);
        userInvitCodeMapper.updateByPrimaryKeySelective(invitCode);

        Integer invalid= userInvitCode.getInvalid();
        if (1==invalid){
            throw  new CustomException("当前用户被禁止邀请");
        }
        return  userInvitCode;
    }

    @Override
    public UserInvitCodeVO getUserInvitCodeVO(String code,String adCode) {
        if (StringUtils.isEmpty(adCode)){
            throw  new CustomException("adCode is null");
        }
        if (StringUtils.isEmpty(code)){
            throw  new CustomException("口令不能为空");
        }
        UserInvitCode userInvitCode= this.getUserInvitCode(code);

        if (null == userInvitCode){
            throw  new CustomException("当前code不存在");
        }
        String  userInvitCodeAdCode=userInvitCode.getAdCode();
        if (userInvitCodeAdCode.equals(adCode)==false){
            throw  new CustomException("位置错误");
        }
        Integer invalid=userInvitCode.getInvalid();
        if (1 == invalid){
            throw  new CustomException("当前invalid已经失效");
        }
        Long userId=userInvitCode.getUserId();
        if (null==userId){
            throw  new CustomException("当前userId为空");
        }
        SysUser sysUser=sysUserMapper.selectUserById(userId);
        if (null==sysUser){
            throw  new CustomException("没有当前用户信息");
        }
        UserInvitCodeVO userInvitCodeVO =new UserInvitCodeVO();
        BeanUtils.copyProperties(userInvitCode,userInvitCodeVO);
        String nickName= sysUser.getNickName();
        userInvitCodeVO.setNickName(nickName);
        String avatar = sysUser.getAvatar();
        userInvitCodeVO.setAvatar(avatar);
        return userInvitCodeVO;
    }

}
